// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Author: wsfuyibing <682805@qq.com>
// Date: 2024-08-02

package gen_service

import (
	"gitee.com/go-libs/console"
	"gitee.com/go-libs/db-xorm/db/commands"
	"gitee.com/go-libs/db-xorm/db/commands/base"
)

// New
// creates a console command.
func New() *console.Command {
	// Creates
	// a provider instance.
	provider := &Provider{common: &commands.Common{}}

	// Creates
	// a command for provider.
	provider.command = console.NewCommand(Name).
		SetDescription(Description)

	// Append options on command.
	provider.command.Add(
		// Working directory.
		//
		//   go run main.go gen:service --base-dir=/data/sketch
		console.NewOption(base.OptBaseDir).
			SetShortName(base.OptBaseDirShort).
			SetDescription(base.OptBaseDirDesc).
			SetDefaultValue(base.OptBaseDirDefault),

		// Data source name.
		//
		//   go run main.go gen:service --dsn="root:pass@tcp(127.0.0.1:3306)/test"
		console.NewOption(base.OptDsn).
			SetDescription(base.OptDsnDesc),

		// Which table will be exported.
		//
		//   go run main.go gen:service --export="user"
		console.NewOption(base.OptExport).
			SetShortName(base.OptExportShort).
			SetDescription(base.OptExportDesc).
			SetRequired(true),

		// Model path.
		//
		//   go run main.go gen:service --model-path=app/models
		console.NewOption(base.OptModelPath).
			SetShortName(base.OptModelPathShort).
			SetDescription(base.OptModelPathDesc).
			SetDefaultValue(base.OptModelPathDefault),

		// Override existing files.
		//
		//   go run main.go gen:service --override
		console.NewNullOption(base.OptOverride).
			SetDescription(base.OptOverrideDesc),

		// Which table will be exported.
		//
		//   go run main.go gen:service --prefix="cdb_"
		console.NewOption(base.OptPrefix).
			SetShortName(base.OptPrefixShort).
			SetDescription(base.OptPrefixDesc),

		// Target path.
		//
		//   go run main.go gen:service --target-path=app/services
		console.NewOption(base.OptTargetPath).
			SetShortName(base.OptTargetPathShort).
			SetDescription(base.OptTargetPathDesc).
			SetDefaultValue(DefaultTargetPath),
	)

	// Bind
	// provider to command.
	provider.command.SetProvider(provider)

	// Returns
	// a command of the provider.
	return provider.command
}
